from flask_wtf import Form
from flask_wtf import EqualTo
from flask_wtf import PasswordField
from flask_wtf import TextField
from flask_wtf import SelectMultipleField
from flask_wtf import SubmitField
from flask_wtf import widgets

from app.validators import Required
from app.validators import length
from app.validators import Email


class UsuarioBuscar(Form):
    """
    Formulario de busqueda de usuarios
    """
    id = TextField()
    nombre = TextField()
    email = TextField()
    estado = TextField()
    

class UsuarioEditable(Form):
    """
    Formulario para la creacion de usuarios
    """
    
    nombre = TextField('Nombre de usuario:', [Required(), length(min=0, max=50)])
    email = TextField('Direccion de e-mail:', [Email(), length(min=0, max=50)])
    contrasenha = PasswordField('Clave:', [Required(), length(min=0, max=120)])
    confirm = PasswordField('Repita la clave:', [
      Required(),
      EqualTo('contrasenha', message='Las claves no son iguales')
      ])
    pregunta = TextField('Pregunta de seguridad:', [Required() , length(min=0, max=80)])
    respuesta = TextField('Respuesta:', [Required(), length(min=0, max=80)])
    roles =  SelectMultipleField('Roles:', [Required()], coerce=int,
        widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput())


class UsuarioNoEditable(Form):
    """
    Formulario para la consulta de usuarios
    """
    
    nombre = TextField('Nombre de usuario:')
    estado = TextField('Estado:')
    email = TextField('Direccion de e-mail:')
    roles =  SelectMultipleField('Roles:', coerce=int,
        widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.Option())
    
class UsuarioModificacion(Form):
    """
    Formulario para la modificacion de usuarios
    """
    
    nombre = TextField('Nombre de usuario:', [Required(), length(min=0, max=50)])
    email = TextField('Direccion de e-mail:', [Email(), length(min=0, max=50)])
    pregunta = TextField('Pregunta de seguridad:', [Required() , length(min=0, max=80)])
    respuesta = TextField('Respuesta:', [Required(), length(min=0, max=80)])
    roles =  SelectMultipleField('Roles:', [Required()], coerce=int,
        widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput())
    

class UsuarioClave(Form):
    """
    Formulario para la modificacion  de clave de usuarios
    """
    contrasenha = PasswordField('Clave:', [Required(), length(min=0, max=120)])
    confirm = PasswordField('Repita la clave:', [
      Required(),
      EqualTo('contrasenha', message='Las claves no son iguales')
      ])
